- You may now register KeyQuencer using a check or your credit card. See the online documentation in the control panel for more information.
- The icons have changed, so you may want to rebuild your desktop(s) after installing KeyQuencer 1.2.2. The new icon layout should be more coherent with the functions of the various KQ components.
- KeyQuencer now keeps a list of the macro names in memory; this allows both KeyQuencer extensions and third-party software to invoke macros by name and to build a list of the available macros. Square One 3.0 supports this new feature, and OtherMenu should soon include a "KeyQuencer Macros" external. New callbacks in the KeyQuencer glue can be used to access the macro names, text and keystrokes.
- Added sample code that builds a KeyQuencer macros menu in a simple fat application, updated the old sample projects.
- The fat version of the Macro Editor is now included in the main package, since most shipping Macs are now PowerPC-based. You may create a 68K-only version with my PowerPCheck 3.0 utility if you really need it.
• ENGINE FIXES:
- Fixed a potential startup problem that caused crashes if the KQ Engine was loaded after the PaperPort Extension. The "bug" had been there all the time since the first shareware version, and it never showed until the PaperPort came out...
- Fixed a minor problem with some kinds of dialogs, which could stop macro execution until they were dismissed; the fix should make all macros run more reliably under all circumstances. The problem typically occurred when a window behind a modal dialog had to be redrawn, but the front application couln't take care of it (i.e. the update event was not serviced). KeyQuencer won't wait for update events to be serviced any longer.
- Fixed a major problem in the work-around for Microsoft applications: I discovered that EventAvail is called by the StillDown and WaitMouseUp traps, which in turn are called by MenuSelect, DragGrayRgn, DragWindow and many other toolbox calls; since WaitMouseUp doesn't expect to receive null events (only mouse ups and downs), it doesn't handle them properly and acts as if they were mouse-ups (stopping menu selections and window dragging, for instance); also, macros could keep running while menus were being pulled, which was not good for macro synchronization; both problems have been fixed, and the Microsoft patch now works fine.
- Since FullWrite uses the "cmd-shift-return" keystroke used by KeyQuencer to stop a running macro, I changed the code so that the keystroke is only intercepted if a macro is running; if no macro is running, then the keystroke flows through to the application. The only drawback is that it's now easier to assign the same keystroke to other control panels, since you can type the cmd-shift-return combination when they ask you to enter the hot key for some operation.
- A minor problem with the KeyQuencer runtime dialogs (such as those used by QuickMacro, EnterClipText and Confirm) has been fixed; specifically, showing these dialogs on top of a modal dialog that had user items in it could cause crashes (this is a bug in the system software, not in KQ, and I had to write a workaround for it). A positive side effect of this workaround is that window updates behind a KeyQuencer dialog will no longer prevent other applications from getting CPU time.
- Fixed a minor bug in the DisplayMessage glue, which caused messages longer than 255 chars not to be displayed at all.
• EXTENSIONS FIXES:
- Fixed a problem in the CopyScreen extension which could cause system crashes when saving the picture to a file (the OpenPicture trap unexpectedly calls the PutPicData procedure before returning the picture handle to the program).
- The SelectWindow extension has been modified to work with WorldScript II and should now be more reliable. It is also less picky when it comes to allow window selections, since it now tries to select the specified window even if a modal dialog is open; it is up to the application to forbid any unwanted window selections. This helps with applications that use dialog windows in weird ways, such as WriteNow with his ruler window.
- The Key extension has a new "keyup" parameter that posts a key-up event after the usual key-down. This is usually not necessary, but it's required by some applications such as the AppleCD Audio Player.
- Changed the click position for "Click closebox" and "Click zoombox" so that they also work with Aaron's 3D windows (Aaron is an extension by Greg Landweber that gives your Mac a new Copland-like look). Note that some of the new Copland "personalities" that have been shown on various magazines will move the close and zoom box to other locations, and these will still not work...
- The "relative" parameter was not shown in MouseJump's syntax.
• CONTROL PANEL FIXES:
- When copying macros in the control panel, the copied text containing the macro names and keystrokes now uses a tab character between the name and the key combination; this makes it easier to create a well-tabulated macro list in any word processor and to import the macros into a database.
- Found a work-around for the Apollo application-switching problem. Apollo can assign tasks to the "power on" key, and it uses a patch to KeyTranslate to detect a key press on the "power on" key. KeyTranslate is usually used by the keyboard driver to translate raw key codes into virtual key codes, but it's a publicly available routine so KQ uses it to assign the right names to each key on the keyboard. When KQ calls the routine with a raw key code of 0x7F, Apollo believes that the "power on" key has been pressed. KQ now stops at 0x7E when mapping the keyboard to keep Apollo happy.
- Added a Finder icon help resource to the control panel for balloon help support, as suggested by Jim Walker.
• MACRO EDITOR FIXES:
- Fixed a bug in the Macro Editor's "Save As..." command, which displayed a "File not open" error when saving an already saved macro with a different name;
• OTHER NOTES:
- WARNING: in an attempt to avoid useless and wasteful redundancy from the extensions, I have removed the "sec", "min" and "hr" parameters from Wait, WaitApp and WaitWindow; you'll have to replace these forms with the full parameters, i.e. "seconds", "minutes" and "hours". Hope this won't bother you too much...